package cn.bugstack.infrastructure.dao;

import cn.bugstack.infrastructure.dao.po.PayOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface IOrderDao {

    // 插入新订单
    void insert(PayOrder payOrder);

    // 根据用户id 和 商品id 查询未支付订单
    PayOrder queryUnPayOrder(PayOrder payOrder);

    // 更新订单支付信息
    void updateOrderPayInfo(PayOrder payOrder);

    // 更改订单为支付状态
    void changeOrderPaySuccess(PayOrder payOrderReq);

    // 查询处于等待支付状态 且 下单超过一分钟的订单
    List<String> queryNoPayNotifyOrder();

    // 查询超时订单, 处于等待支付状态 且 下单超过30分钟的的订单
    List<String> queryTimeoutCloseOrderList();

    // 修改单条订单为关单状态
    boolean changeOrderClose(String orderId);

    // TODO status 没有 Market状态，批量更改，订单的状态
    void changeOrderMarketSettlement(@Param("outTradeNoList") List<String> outTradeNoList);

    // 通过订单 id，查询订单信息
    PayOrder queryOrderByOrderId(String orderId);

    // 更新订单的交易状态为已完成
    void changeOrderDealDone(String orderId);

    // 查询 pageSize条 用户Id 的支付订单，id > lastId
    List<PayOrder> queryUserOrderList(@Param("userId") String userId, @Param("lastId") Long lastId, @Param("pageSize") Integer pageSize);

    // 通过用户ID 订单Id，查询支付订单的数据
    PayOrder queryOrderByUserIdAndOrderId(@Param("userId") String userId, @Param("orderId") String orderId);

    // 根据用户Id 订单Id，将订单状态更改为 关闭
    boolean refundOrder(@Param("userId") String userId, @Param("orderId") String orderId);

    // 更改订单状态 为退款中
    boolean refundMarketOrder(@Param("userId") String userId, @Param("orderId") String orderId);
}
